home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
-
- # Fork from original (upstream) microcode_ctl.start,
- # to simplify the maintainability.
-
- ### BEGIN INIT INFO
- # Provides: microcode.ctl
- # Required-Start: $local_fs
- # Required-Stop: $local_fs
- # Should-Start: $remote_fs
- # Should-Stop: $remote_fs
- # Default-Start: 2 3 4 5
- # Default-Stop: 0 1 6
- # Short-Description: Load Intel microcode on CPU
- # Description: Load Intel microcode on CPU, which corrige
- # some CPU errata.
- ### END INIT INFO
-
-
-
- # Package in removed but not yet purget status.
- [ ! -x /usr/sbin/microcode_ctl ] && exit 0
-
- # aborting on non-Intel processor
-
- grep -qs GenuineIntel /proc/cpuinfo || exit 0
-
-
- # perform the update
- doit ()
- {
-
- # microcode location
-
- MICROCODE=/usr/share/misc/intel-microcode.dat
-
- if [ ! -e "$MICROCODE" ] ; then
- echo "$0: microcode not found in $MICROCODE"
-
- fi
-
-
- # device name in LANANA
- DEVICE=/dev/cpu/microcode
- # device name in devfsd
- DEVICE2=/dev/misc/microcode
- # device name in some old versions of udev
- DEVICE3=/dev/microcode
-
- # Lets just be sure we have a device file...
- # ... with workaround because different name policy in lanana and devfsd
- if [ -x /sbin/modprobe ] ; then
- /sbin/modprobe -q -s microcode > /dev/null 2> /dev/null || true
- fi
- DEV="xxx"
- if [ -e "$DEVICE" ]; then
- DEV="$DEVICE"
- elif [ -e "$DEVICE2" ]; then
- DEV="$DEVICE2"
- elif [ -e "$DEVICE3" ]; then
- DEV="$DEVICE3"
- else
- ## udev is slow creating devices, so in this case we wait
- ## some extra time (max 80 times 0.1s = 8s).
- for i in `seq 80`; do
- if [ -e "$DEVICE" ]; then
- DEV="$DEVICE"
- break
- fi
- echo -n "."
- sleep 0.1
- done
- if [ "$DEV" = "xxx" ]; then
- echo "$0: microcode device $DEVICE doesn't exist!"
- exit 0
- fi
- fi
-
-
- echo -n "Applying Intel IA32 Microcode update... "
-
- /usr/sbin/microcode_ctl -Q -d "$DEV" -f "$MICROCODE"
-
- if [ $? -eq 0 ] ; then
- echo "done."
- else
- echo "fail."
- fi
-
- # *try* to unload the microcode module
- #[ -x /sbin/modprobe ] && /sbin/modprobe -r microcode > /dev/null 2> /dev/null
-
- }
-
-
- case "$1" in
- start|""|reload|force-reload|restart)
- doit
- exit 0
- ;;
- stop)
- ;;
- *)
- echo "$0 usage: microcode {start|restart|reload}"
- exit 2
- esac
-
-